/**********************************************************************************
测试环境：
	   硬件：Windows11系统PC机。 Mega2560主控板，Mega2560扩展版
	   软件：Arduino IDE2.3.3

简介：实现Mega2560扩展版声明单个编码电机.
     本实验使用编码电机编号为1的编码电机为示例
     编码电机引脚为：电机方向1:34   电机方向2:35   电机pwm:12  编码器A:18  编码器B:31

日期：2024.11.26
QQ交流群：811348489
寄语：代码中能遇见你，真好，有你，真好....有你同创智能机器人科技(北京)有限公司.
**********************************************************************************/

#include "uni_motor.h" //调用编码电机库
#define RATE 115200    //定义串口波特率

/*--------------------------------------------------------------------------------------------------------------------------
功能：构造函数定义4. 用来声明编码电机对象.
概述：该构造函数可以使用L298N驱动的编码电机，可以使用自己的，或者是其他厂家提供的编码电机，方便开发者使用
函数原型：UNI_MOTOR(int m_1, int m_2, int pwm, int e_a, int e_b, float kp, float ki, float kd, float pulse, float radius, bool revs);
函数讲解：
  int m_1: 表示控制编码电机方向的引脚1
  int m_2: 表示控制编码电机方向的引脚2
  int pwm: 表示控制编码电机PWM脉宽调制的引脚
  int e_a: 表示编码电机编码器A相引脚
  int e_b: 表示编码电机编码器B相引脚
  float kp: 表示设定pid调控中的kp的值
  float ki: 表示设定pid调控中的ki的值
  float kd: 表示设定pid调控中的kd的值
  float pulse: 表示车轮转动一圈编码器触发的总次数.计算方式如下：
              pulse = ppr(电机线圈数) * 2 * reduction(电机减速比) * 2
              本实验中使用的编码电机脉冲数 pulse = 13 * 2 * 30 * 2 = 1560
  bool revs: 表示控制编码电机编码器读数正反转标志. true:表示电机正转编码器取正 false：表示电机正转编码器取反 */
int m1 = 34;  //电机方向引脚1
int m2 = 35;  //电机方向引脚2
int pwm = 12;  //电机pwm脉宽引脚
int enca = 18;  //设置编码器A相引脚
int encb = 31;  //设置编码器B相引脚
float kp = 10.0;  //pid参数中kp的值
float ki = 0.05;  //pid参数中ki的值
float kd = 25.05;  //pid参数中kd的值
float pulse = 1560;  //车轮转动一圈编码器脉冲总数
float radius = 0.04;  //编码电机车轮半径，单位：米
bool  reverse = true;  //电机编码器标志，true:表示电机正转编码器取正 false：表示电机正转编码器取反
UNI_MOTOR motor(m1, m2, pwm, enca, encb, kp, ki, kd, pulse, radius, reverse);  //pid参数中kp的值

void setup() {
  delay(2500);
  Serial.begin(115200); //打开串口
  motor.init(); //编码电机初始化设置
  /*获取编码电机当前参数. 打开串口监视器即可查看电机是否定义成功.这个函数可添加，也可不添加，仅仅用来校验*/
  motor.get_parameters();
}

void loop() {

}
